// PROGRAMA : TABPEE01 OPCA: "TMB"
// OPCAO : 'ETD' - CLASSIFICADO PELO NOME DO MUNICIPIO
// BIBLIOTECA : SISP
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : GEJUSPC - GERENCIA DA JUSTICA, SEGURANCA PUBLICA E
// CIDADANIA / INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : * DATA: 11/09/2002
// OBJETIVO : EMITIR TABELA DOS MUNICIPIOS DO BRASIL
// ATUALIZACOES DATA
// OBJETIVO :
package br.com.vti.sisp_sicrim.antigo.controller.programa;

import java.io.FileNotFoundException;
import java.text.ParseException;

import net.sf.jasperreports.engine.JRException;

import org.apache.commons.lang3.StringUtils;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.caelum.vraptor.interceptor.download.InputStreamDownload;
import br.com.vti.sisp_sicrim.antigo.controller.relatorios.Tabpee01Report;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Tabpee01A;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Tabpee01 OBJETIVO : EMITIR TABELA DOS MUNICIPIOS DO BRASIL *
 * 
 * @author Incode - Data: mai/2014
 * 
 */
@Resource
@Path("/antigo/tabpee01")
public class Tabpee01 {
	// Views utilizadas
	SicTabelas vwDvetab = new SicTabelas();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Tabpee01A tabpee01A;
	Tabpee01Report report;
	// Includes utilizados
	// Areas globais / session
	Sisgsisp sisgsisp;
	// Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	Tabpee01 tabpee01Anterior;
	String faseproc = "0";
	private int cont = 0;
	private String tabdec = "";
	private String tab1 = "";
	private int codtab = 0;
	private String tabela = "";

	private Tabpee01A preMapas() {
		tabpee01A = new Tabpee01A(true, sessao);
		tabpee01A.setDataCorrente(UtilBean.obtemDataCorrente());
		tabpee01A.setDataCorrente(UtilBean.inverteDataCorrente());
		sessao.getSisgsisp().setVar(10);
		// Par�grafo: r0()
		return tabpee01A;
	}

	public Tabpee01(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public InputStreamDownload executar(Tabpee01A tabpee01A) {
		try {
			return main(tabpee01A);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
		return null;
	}

	private InputStreamDownload main(Tabpee01A ptabpee01A) throws ParseException, JRException, FileNotFoundException {
		int cod = 0;
		if (ptabpee01A == null) {
			primeiraVez = true;
			// tabpee01B = new Tabpee01B (primeiraVez);
			tabpee01A = preMapas();
			tabpee01A.setNavegar("../tabpee01/executar");
			result.include("tabpee01A", tabpee01A);
			sessao.setAtributo("TABPEE01", this);
			tabpee01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		} else {
			restaurarEstados(ptabpee01A);
		}

		// DEFINE PRINTER(EFM = 1)
		// RELATORIO 1 PS=62 LS=95 SG=ON
		report = new Tabpee01Report();
		report.setPageSize(62);
		report.setLineSize(95);
		report = new Tabpee01Report();
		tabpee01A.setOperacao("TMB");

		tabpee01A.receberTela(false, result);
		if (!UtilBean.funcao.equals(UtilBean.ctt_processa)) {
			tabpee01A.enviarMensagem(null, "");
			tabpee01A.setNavegar("../tabpee01/executar");
			result.include("tabpee01A", tabpee01A);
			sessao.setAtributo("TABPEE01", this);
			tabpee01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}
		if (!(sessao.getSisgsisp().getOperacao().equals("TMB"))) {
			saidaExit();
		}
		codtab = 001;
		funcoes.tabsemi(sessao);
		if (!funcoes.camret.equals("")) {

		}
		vwDvetab.consultaCodigoTabela(codtab);
		if (vwDvetab.totalRegistros() == 0) {
			tabpee01A.enviarMensagem("codtab", "");
			tabpee01A.setNavegar("../tabpee01/executar");
			result.include("tabpee01A", tabpee01A);
			sessao.setAtributo("TABPEE01", this);
			tabpee01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}

		tabdec = UtilBean.moveSubstring(tabdec, 0, 3, "N", codtab);
		if (codtab < 100) {
			cod = 99;
		} else {
			if (codtab < 200) {
				cod = 199;
			} else {
				cod = 299;
			}
		}
		vwDvetab.fecha();

		vwTabele.consultaTabele(cod, (long) codtab);
		tabela = vwTabele.getDescricaoElem();

		if (vwTabele.registrosProcessados() == 0) {
			tabela = StringUtils.repeat("*", 15);
		}
		if (!janela1()) {
			vwTabele.pesq = "";
			sessao.setAtributo("TABPEE01", this);
			result.include("tabpee01A", tabpee01A);
			tabpee01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			return null;
		}
		vwTabele.fecha();
		// if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
		// continue;
		// }

		// FASE-1
		// tabpee01B.enviarReceberTela(false, result);
		// if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
		// continue;
		// }
		while (vwDvetab.leituraTabdecMaiorig(codtab, tabpee01A.getCod33())) {
			// READADA
			if (!tabpee01A.getUf().trim().equals("")) {
				if (!(vwTabele.getChaveAlfaAcesso() == tabpee01A.getUf())) {
					continue;
				}
			}
			relatorio();
			if (vwDvetab.quebraDintabcodtab()) {
				tabpee01A.setMensagemSaida("EMISSAO EFETUADA OK");
				break;
			}
		}
		return report.imprimir();

		// vwDvetab.pesq = "";
		// sessao.setAtributo("TABPEE01", this);
		// result.include("tabpee01B", tabpee01A);
		// if (!result.used()) {
		// tabpee01A.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
		// }
	}

	private void relatorio() throws ParseException, JRException {
		report.setDiatabChalfa(vwTabele.getChaveAlfaAcesso());
		report.setDiatabDescel(vwTabele.getDescricaoElem());
		report.setDintabCodele(vwTabele.getCodigoElem());
		cont += 1;
		if (cont > 50) {

			// tabpee01B.enviarReceberTela(false, result);
			// TABPEE01
			// report.gravaRelatorio(1);
			cont = 0;
		}
		// RELATORIO
		report.gravaRelatorio(2);

		// RELATORIO
	}

	private boolean janela1() {

		// tabpee01D.enviarReceberTela(false, result);
		// if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
		// return false;
		// }
		tab1 = UtilBean.concatena(tabela, "-", tabpee01A.getUf());
		tabela = tab1;
		return true;
	}

	private void saidaExit() {
		funcoes.sissm001(result, sessao);
	}

	private void restaurarEstados(Tabpee01A ptabpee01A) {
		this.tabpee01Anterior = (Tabpee01) sessao.getAtributo("TABPEE01");
		if (ptabpee01A != null) {
			tabpee01A = ptabpee01A;
		} else {
			tabpee01A = this.tabpee01Anterior.tabpee01A;
		}
		tabpee01A.setSessao(sessao);
		this.faseproc = this.tabpee01Anterior.faseproc;
	}
}
